package entity

import "shop/utils/convertutil"

type UserFilter struct {
	Id       *int64  `json:"id"`
	Username *string `json:"username" gorm:"column:username"` // 用户名，可以是手机或微信的openid
	Phone    *string `json:"phone"`
	Name     *string `json:"name"`
	Address  *string `json:"address"`
	Sex      *byte   `json:"sex"`
	Avatar   *string `json:"avatar" gorm:"column:avatar"` // 用户头像
	Status   *int    `json:"status"`                      // 账号状态，1：正常，2：冻结，3：禁用
}

func (UserFilter) TableName() string {
	return TableNameUser
}

type GoodsCategoryFilter struct {
	Id           *int    `json:"id" gorm:"primary_key"`
	Name         *string `json:"name" gorm:"column:name"`
	DisplayOrder *int    `json:"displayOrder" gorm:"column:display_order"`
	ShowStatus   *bool   `json:"showStatus" gorm:"column:show_status"` // 是否显示
}

func (GoodsCategoryFilter) TableName() string {
	return TableNameGoodsCategory
}

type GoodsFilter struct {
	Id              *int64           `json:"id" gorm:"primary_key"`
	ShopId          *int             `json:"shopId" gorm:"column:shop_id"`
	GoodsCategoryId *int             `json:"goodsCategoryId" gorm:"column:goods_category_id"`
	Name            *string          `json:"name" gorm:"name"`
	DisplayOrder    *int             `json:"displayOrder" gorm:"column:display_order"`
	Price           *int             `json:"price" gorm:"column:price"`   // 商品价格，没有主属性的时候该字段生效
	Count           *int             `json:"count" gorm:"column:count"`   // 商品库存，没有主属性的时候该字段生效
	Status          *int             `json:"status" gorm:"column:status"` // 商品状态，1：在售，2：已售空，3：已失效
	Image           *string          `json:"image" gorm:"image"`
	PropertyListStr *string          `json:"-" gorm:"column:property_list"`
	Description     *string          `json:"description" gorm:"description"`
	PropertyList    []*GoodsProperty `json:"propertyList" gorm:"-"`
}

func (GoodsFilter) TableName() string {
	return TableNameGoods
}

// PropertyListToStr 序列化属性列表
func (goods *GoodsFilter) PropertyListToStr() {
	if goods.PropertyList == nil {
		goods.PropertyList = make([]*GoodsProperty, 0, 0)
	}
	goods.PropertyListStr = convertutil.StrPtr(convertutil.ToJsonString(goods.PropertyList))
}

// ParsePropertyList 反序列化属性列表
func (goods *GoodsFilter) ParsePropertyList() {
	goods.PropertyList = make([]*GoodsProperty, 0, 0)
	convertutil.ParseJson(*goods.PropertyListStr, &goods.PropertyList)
}

// OrderInfoFilter 订单信息
type OrderInfoFilter struct {
	OrderNo            *string `json:"orderNo" gorm:"column:order_no;primary_key"`
	UserId             *int64  `json:"userId"`
	ShopId             *int    `json:"shopId"` // 商家id
	OrderStatus        *int8   `json:"orderStatus"`
	WxPayTransactionId *string `json:"wxPayTransactionId"` // 微信订单交易号
	TakeType           *int8   `json:"takeType"`           // 取餐方式
	AddressDetail      *string `json:"addressDetail"`
	GoodsListStr       *string `json:"-" gorm:"column:goods_list"` // 订单商品列表，OrderGoodsList序列化
	TotalPrice         *int64  `json:"totalPrice"`                 // 总价格，分
	PayPrice           *int64  `json:"payPrice"`                   // 实际支付
	RefundCount        *int    `json:"refundCount"`                // 退款商品条数，全部商品都退款时订单状态变为退款状态
	ExtraInfo          *string `json:"extraInfo"`                  // 用户备注
	CreateTime         *int64  `json:"createTime"`
	PayTime            *int64  `json:"payTime"` // 支付时间
	FinishTime         *int64  `json:"finishTime"`
	UserPhone          *string `json:"userPhone"` // 用户联系电话
	Receiver           *string `json:"receiver"`  // 取餐人

	GoodsList []*OrderGoods `json:"goodsList" gorm:"-"`
}

func (OrderInfoFilter) TableName() string {
	return TableNameOrderInfo
}

// GoodsListToStr 序列化订单商品列表
func (order *OrderInfoFilter) GoodsListToStr() {
	if order.GoodsList == nil {
		order.GoodsList = make([]*OrderGoods, 0, 0)
	}
	order.GoodsListStr = convertutil.StrPtr(convertutil.ToJsonString(order.GoodsList))
}

// ParseGoodsList 反序列化订单商品列表
func (order *OrderInfoFilter) ParseGoodsList() {
	order.GoodsList = make([]*OrderGoods, 0, 0)
	convertutil.ParseJson(*order.GoodsListStr, &order.GoodsList)
}

type ShopFilter struct {
	WxPayMchId        *string `json:"wxPayMchId" `                                       // 微信支付商家号
	WxPayApiKey       *string `json:"wxPayApiKeyy" `                                     // 微信支付apiKey
	WxGzhAppId        *string `json:"wxGzhAppId" `                                       // 微信公众号的appId
	WxGzhAppSecret    *string `json:"wxGzhAppSecret"`                                    // 微信公众号的appSecret
	WxMpAppId         *string `json:"wxMpAppId"`                                         // 微信小程序的appId
	WxMpAppSecret     *string `json:"wxMpAppSecret" `                                    // 微信小程序的appSecret
	CertPEMPublicKey  *string `json:"certPEMPublicKey" gorm:"column:certpem_public_key"` // 微信支付的tls-p12证书-PEM格式的公钥,微信退款等需要
	CertPEMPrivateKey *string `json:"CertPEMPrivateKey" gorm:"column:certpem_private_key"`
	MerchantName      *string `json:"MerchantName" gorm:"column:merchant_name" `         // 商家姓名
	Name              *string `json:"name" gorm:"column:name"`                           // 店铺名称
	PackingPrice      *int    `json:"packingPrice" gorm:"column:packing_price"`          // 包装费（单位: 分）
	SendingPrice      *int    `json:"sendingPrice" gorm:"column:sending_price"`          // 配送费（单位: 分）
	SendingNeedPrice  *int    `json:"sendingNeedPrice" gorm:"column:seeding_need_price"` // 起送需要的最低价格（单位: 分）
	StartTime         *string `json:"startTime" gorm:"column:start_time"`                // 营业开始时间, eg:09:30
	EndTime           *string `json:"endTime" gorm:"column:end_time"`                    // 营业结束时间
	RelationPhones    *string `json:"relationPhones" gorm:"column:relation_phones"`      // 联系电话, 逗号隔开
	RelationQQ        *string `json:"relationQQ" gorm:"column:relation_qq"`              // 联系QQ
	RelationWeixin    *string `json:"relationWeixin" gorm:"column:relation_weixin"`      // 联系微信
	Status            *int    `json:"status" gorm:"column:status"`                       // 店铺状态, 营业中|休息中|已关闭
	Notice            *string `json:"notice" gorm:"column:notice"`                       // 店铺公告
	Address           *string `json:"address" gorm:"column:address"`
	Description       *string `json:"description" gorm:"column:description"`
	PrinterId         *string `json:"printerId" gorm:"column:printer_id"`
}

func (ShopFilter) TableName() string {
	return TableNameShop
}
